1. Field of the Invention
The present invention relates to the field of configuration of resources and more specifically relates to the use of context subsystems to address configuration problems and particularly complex configuration problems.
2. Description of the Related Art
Configuring a system refers to the process of selecting and connecting components to satisfy a particular need or request. If a system is based on a limited number of components, the process of configuring the system can be relatively straightforward. For example, the purchase of an automobile requires a salesperson to configure a system (automobile and assorted options) to satisfy a customer's request. After selecting from a plurality of models, the salesperson completes the transaction by selecting options to configure and price an automobile.
In another relatively simple example, one could describe the configuration of a system such as a 3 legged stool by stating that “the seat is connected to a first bolt, the first bolt is connected a first leg, the first leg is connected to a first foot pad. The seat is also connected to a second bolt, the second bolt is connected a second leg, the second leg is connected to a second foot pad. The seat is also connected to a third bolt, the third bolt is connected a third leg, the third leg is connected to a third foot pad.” As is evident, as finishes, leg cross bars and hardware, seat cushions and fastening materials, etc. are added to a relatively simple stool, the configuration problem becomes more involved. Then, the problem becomes more difficult when a change is made. The change must be verified as correct and the change analyzed to evaluate any impact on components that were dependent on the original configuration.
Thus, as system specifications become more customized and varied, configuration alternatives increase and the task of configuring a system becomes more complex. This increased complexity has resulted in a need for computer-based assistance with the configuration process.
A configuration modeling language is used to create configuration code for organizing and conveying system configuration information in a manner that can be understood and confirmed by a computer. Configuration technology developed by companies such as Trilogy, Inc. (“Trilogy”) of Austin, Tex. utilize configuration code generated using configuration modeling language to ‘describe’ and solve both simple and complex configuration problems. An example of such configuration technology is set forth in U.S. U.S. Pat. No. 5,515,524 by John Lynch and David Franke and assigned to Trilogy (referred to herein as the “Lynch patent”), which is herein incorporated by reference in its entirety.
As is generally self evident, society is producing more and more complex systems in a wide array of industries. For example, in the computer industry, an example of a complex system is a desktop computer system. The available configuration alternatives of a computer system are numerous and varied, including alternatives available when choosing the microprocessor, motherboard, monitor, video controller, memory chips, power supply, storage devices, storage device controllers, modems, and software.
Configuring a desktop computer system requires that a selected component is compatible with the other components in the configured system. For example, a power supply must be sufficient to supply power to all of the components of the system. In addition, the monitor must be compatible with the video controller (e.g., resolution), and the storage device must be compatible with its controller (e.g., SCSI interface). A motherboard must have enough slots to handle all of the boards installed in the system. The physical constraints of the cabinet that houses the system's components are also considered. The cabinet has a fixed number of bays available for storage devices (e.g., floppy disk drives, hard disk drives, or tape backup units). These bays have additional attributes that further define their use. For example, the bay may be located in the front of the cabinet and provide access from the front of the cabinet. Another bay may be located behind the front-accessible bays, and be limited to devices that do not need to be accessed (e.g., hard disk drive). Bays may be full-height or half-height. Before a storage device can be added to the configuration, a configuration system must identify a bay into which the storage device will be housed. This requires that at least the accessibility and height of the storage device must be examined to determine compatibility with an available cabinet bay.
The connection between a storage device and its controller must be determined based on the location of each. The cable that connects the storage device and its controller must provide compatible physical interfaces (e.g., 24-pin male to a 24-pin female).
A method of establishing a communication pathway in a computer system is known as daisy chaining. Daisy chaining provides the ability to interconnect components such that the signal passes through one component to the next. Determining whether a daisy chain may be established requires that the available logical (e.g., IDE or SCSI) and physical interfaces (e.g., 24-pin) of all elements in a daisy chain be known. In addition, it is important to know whether conversions from the source datatype to the destination datatype are allowed. When a daisy chaining candidate is added to the system, the interconnections and conversions between existing components may be checked to determine whether the new component should be an element of the daisy chain.
Additionally, a configured system also often includes software programs that must be included as part of the configured system. Software programs are of a variety of types such as operating systems, application programs, and communication protocols.
Thus, relative to the “3 legged stool” configuration problem, the desktop computer system configuration problem demands an exponentially more complex solution. Applying conventional configuration technology, such as the technology described in the Lynch patent, to the desktop computing system configuration problem has proved to be a workable solution.
However, systems are becoming even more complex. With more components being added, more connections being made, and more resources being utilized, it is evident that conventional modeling languages will generate large quantities of complex configuration code, which can be difficult to create and evaluate for accuracy. Thus, the potential for errors and the amount of maintenance time necessary to catch and correct errors and modify complex configurations can be staggering.
Referring to FIG. 1, a NUMA (Non-Uniform Memory Access) system 100 presents an example of potentially very complex configuration problem. NUMA system 100 is a type of parallel processing architecture in which each processor has its own local memory but can also access memory local to other processors. In terms of configuration implementations, it can be described as individual computer systems (each designated as a “CPU”) 102a-d that can act as one machine. There is one copy of an operating system and single copies of any additional software collectively referred to as software 104 for the entire complex of machines. Thus, software 104 is a shared resource, but to prevent multiple instances of software 104 from appearing in the configuration code representing NUMA 100, software 104 is coded to “live” with (i.e. are identified with) CPU subsystem 102a. But, additional NUMA system 100 configuration code is generated so that each processor is configured to use software 104. An example configuration complexity problem arises when NUMA system 100 is modified to remove one of the CPU subsystems. If CPU 102a is removed, then all the software 104, which lives in CPU 102a, is removed as well. Thus, NUMA system 100 configuration code must not only be modified to remove CPU 102a, the code must be analyzed to locate all shared resources such as software 104 and modified to associate software 104 with one of the remaining CPUs 102b-d. 
As evident from the above configuration examples, configuration problems are becoming increasingly complex and difficult to trouble-shoot and maintain.